package com.duan.boot.service;

import com.duan.boot.entity.Department;
import com.duan.boot.entity.User;

import java.util.List;
import java.util.Map;

/**
 * @author duan
 */
public interface DepService {
    /**
     * 更新已有的部门
     * @param department 需要的是一个部门的参数，根据id来修改
     * @return 判断是否修改成功
     */
    boolean upDate(Department department);

    /**
     * 插入一个部门
     * @param department 插入的一个部门的对象，id可以省略，数据库自增
     * @return true或者false
     */
    boolean insert(Department department);

    /**
     * 根据id删除想要删除的部门
     * @param id 用户账户
     * @return true or false
     */
    boolean delete(int id);

    /**
     * 查找所有用户
     * @return 类型位Department的集合
     */
    List<Department> findAll();

    /**
     * 根据部门id查找部门信息
     * @param id 部门id
     * @return Department部门完整信息
     */
    Department getDepById(int id);

    /**
     * 根据部门name查找部门信息
     * @param name 部门name
     * @return Department部门完整信息
     */
    Department getDepByName(String name);

    /**
     * 根据用户查找他所在的部门的完整信息
     * @param user User用户，用里面的部门
     * @return 部门Department完整信息
     */
    Department getWithUser(User user);

    /**
     * 添加一个新的用户
     * @param user User类型
     * @return true or false
     */
    boolean adduser(User user);

    /**
     * 根据部门的名称查看当前部门所有的成员
     * @param name 部门名称
     * @return 包含所有user的List
     */
    List<User> showUser(String name);

    /**
     * 根据用户的账号删除用户
     * @param id 用户学号
     * @return true or false
     */
    boolean removeUser(int id);

    /**
     * 更改用户信息
     * @param user  user类型
     * @return 0或1
     */
    Integer saveUser(User user);

    /**
     * 实现分页
     * @param name
     * @param pageIndex 当前页数
     * @param pageSize 每页条数
     * @return map
     */
    Map<String, Object> findAllUserOrderByName(String name, Integer pageIndex, Integer pageSize);

    /**
     * 传入部门id和不么name都可以查询到具体信息
     * @param idOrName
     * @return
     */
    Department searchDep(Object idOrName);

    /**
     * 查询所有的部门的名字
     * @return
     */
    List<String> findAllDepName();

    /**
     * 查找所有部门的id
     * @return
     */
    List<Integer> findAllDepId();

    /**
     * 根据id或者name直接查找
     * @param idOrName
     * @return
     */
    Department findUserByIdOrName(Object idOrName);

    /**
     * 查找部门和他的成员
     * @return
     */
    List<Map<String, Object>> findDepAndUser();

    /**
     * 查找部门成员的个数
     * @param depId
     * @return
     */
    Integer numberOfDep(Integer depId);

    /**
     * 分页查询
     * @param page 当前页数
     * @param numberOfPage 每页显示多少条
     * @param depId 部门的id
     * @return 当前页的集合
     */
    List<User> pagedQuery(Integer page, Integer numberOfPage, Integer depId);

    /**
     * 查询当前部门一共有多少页
     * @param numberOfPage 每页显示多少条
     * @param depId 部门的id
     * @return 一共有多少页
     */
    Integer pagedQueryPage(Integer numberOfPage,  Integer depId);

    /**
     * 根据id获得部门的名字
     * @param depId 部门id
     * @return 部门的名称
     */
    String getNameById(Integer depId);
}
